package com.lft.freshordering.service.impl;


import com.lft.freshordering.entity.User;
import com.lft.freshordering.mapper.UserMapper;
import com.lft.freshordering.service.IUserService;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.UUID;
import java.util.concurrent.TimeUnit;

import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author tyhxzy
 * @since 2024-12-02
 */
@Service
public class UserServiceImpl  implements IUserService {
@Autowired
private UserMapper userMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /**
     * 根据用户ID选择用户信息
     *
     * 此方法使用了@Override注解，表明它是在重写父类或接口中的方法
     * 它通过调用userMapper中的selectUserById方法来查询用户信息，体现了单一职责原则和DRY原则（Don't Repeat Yourself）
     *
     * @param id 用户ID，用于查询特定用户信息
     * @return 返回一个User对象，包含查询到的用户信息如果没有找到用户，此方法可能返回null或空对象，具体行为取决于userMapper的实现
     */
    @Override
    public User selectuser(Integer id) {
       return userMapper.selectUserById(id);
    }

    /**
     * 更新用户信息
     *
     * 该方法通过调用UserMapper接口的updateUser方法来更新用户信息
     * 主要作用是将修改后的用户对象同步到数据库
     *
     * @param user 待更新的用户对象，包含用户的相关信息
     * @return 返回影响的行数，通常为1，表示更新成功；否则，更新失败
     */
    @Override
    public int updateuser(User user) {
        int i = userMapper.updateUser(user);
        return i;
    }

    @Override
    public String login(String usname, String password) {
        User user = userMapper.selectUserByName(usname);
       if(user!=null){
           if(user.getPassword().equals(password)){
               String token = UUID.randomUUID().toString().replace("", "");

               redisTemplate.opsForValue().set("user"+user.getId(),token,3600, TimeUnit.SECONDS);

               redisTemplate.opsForValue().set(token,user,3600, TimeUnit.SECONDS);
               System.out.println(token);
               return token;

           }else {
               return "1";
           }
       }else {
           return "2";
       }

    }
}
